package com.superkripts.sktools.annotation;

import com.superkripts.sktools.value.BaseDefaultValue;
import com.superkripts.sktools.value.CustomDefaultValue;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface Param {

    /**
     * 默认为方法中的参数名 但也可自定义
     *
     * @return 参数名
     */
    String value() default "";

    /**
     * 默认参数不可为空 传入空后 将直接返回空
     *
     * @return 是否可空
     */
    boolean nullable() default false;

    /**
     * 当启用可选参数后 默认值将会生效 不传入参数时则自动传入默认值
     *
     * @return 默认值
     */
    String defaultValue() default "";

    /**
     * 自定义默认值规则
     *
     * @return 自定义默认值
     * @see CustomDefaultValue
     */
    Class<? extends CustomDefaultValue> defaultType() default CustomDefaultValue.class;
}
